﻿using System;
using System.Collections.Generic;
using Cms.Domain;

namespace Cms.Application.Admin.Views
{
    public interface IEditContentView : IAdminPageView, ITranslatable
    {
        string CurrentTab { get; }

        int CurrentContentID { get; set; }

        int ContentID { get; }

        int MasterTemplateID { get; }

        int DetailTemplateID { get; }

        int PageID { get; }

        string AreaID { get; }

        int LocaleID { get; }

        int VersionID { get; }

        string Content { get; set; }

        string ContentTitle { get; set; }

        string Name { get; set; }

        string SortKey { get; set; }

        int SelectedCategoryID { get; }
        DateTime? StartPublishing { get; set; }

        DateTime? EndPublishing { get; set; }
        void SetHeaderContentDescription(string value);

        void SetCategories(IList<Category> rootCategories, IList<Category> inheritedCategories,
                           IList<Category> categories);

        IEnumerable<Category> GetSelectedCategories();
        // Used to preselect content category

        void SetAllowedAdministratorGroups(IList<AdministratorGroup> availableGroups,
                                           IList<AdministratorGroup> inheritedGroups, IList<AdministratorGroup> groups);

        IEnumerable<AdministratorGroup> GetSelectedAllowedAdministratorGroups();

        void SetDeniedAdministratorGroups(IList<AdministratorGroup> availableGroups,
                                          IList<AdministratorGroup> inheritedGroups, IList<AdministratorGroup> groups);

        IEnumerable<AdministratorGroup> GetSelectedDeniedAdministratorGroups();

        void SetRequiredUserGroups(IList<UserGroup> availableGroups, IList<UserGroup> inheritedGroups,
                                   IList<UserGroup> selectedGroups, IList<UserGroup> deselectedGroups);

        IEnumerable<UserGroup> GetSelectedRequiredUserGroups();

        IEnumerable<UserGroup> GetDeselectedUserGroups();
    }
}